package cn.dansj.common.utils.redis.lock;

import java.lang.annotation.*;

@Target(value = {ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Lock4j {
    /**
     * 锁名称,为空则会使用 包名+类名+方法名
     * support SPEL expression
     */
    String name() default "";

    String prefix() default "";

    /**
     * 等待获取锁的超时时间,超过这个时间将不在等待,报异常退出(ms),0立即退出不等待
     */
    long tryGetLockWaitMaxMs() default Long.MAX_VALUE;

    /**
     * 锁的有效期,超过这个时间,锁将失效,后面的线程将可以重新持有该锁(ms),0不失效
     */
    long lockExpireTimeMs() default 0;

    /**
     * 获取锁失败的返回信息
     */
    String returnMsg() default "获取锁失败";

    /**
     * 如果是WebRequest环境是否直接返回错误信息
     */
    boolean returnErrorInWebRequest() default true;

    /**
     * 锁类型 来自LockFactory中注册的锁类型
     */
    String lockType() default "redis";
}
